package Demo02;

import java.util.Objects;

class money implements Cloneable{
    public double money=12.5;

    @Override
    protected Object clone() throws CloneNotSupportedException{
        return super.clone();
    }
}

class student implements Cloneable{
    public String name;
    public money m=new money();

    @Override
    public String toString(){
        return "student{"+
                "name="+name+'\''+
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException{
        //只是克隆了student对象
        student s=(student)super.clone();
        //克隆了student对象里面的money对象
        //深克隆
        s.m=(money)this.m.clone();
        return s;
    }

//    public boolean equals(Object obj){
//        if(obj==null){
//            return false;
//        }
//        //指向的是同一个对象
//        if(this==obj){
//            return true;
//        }
//        if(!(obj instanceof student)){
//            return false;
//        }
//        student s=(student)obj;
//        if(this.name.equals(s.name)){
//            return true;
//        }
//        return false;
//    }

    @Override
    public boolean equals(Object o){
        if(this==o){
            return true;
        }
        if(o==null||getClass()!=o.getClass()){
            return false;
        }
        student s=(student)o;
        return Objects.equals(name,s.name);
    }

    @Override
    public int hashCode(){
        return Objects.hash(name);
    }

}

class perosn{

}
class animal{

}
class dog{
    public void func1(){};
    public void func2(){};
    public void func3(){};
}

public class test {
//    public static void main(String[] args) throws CloneNotSupportedException {
//        student s1=new student();
//        s1.name="张三";
//        student s2=(student)s1.clone();
//        System.out.println(s1);
//        System.out.println(s2);
//    }

//    public static void main(String[] args) throws CloneNotSupportedException {
//        student s1=new student();
//        student s2=(student)s1.clone();
//        System.out.println(s1.m.money);
//        System.out.println(s2.m.money);
//        System.out.println("__________________");
//        s2.m.money=100;
//        //深拷贝
//        System.out.println(s1.m.money);
//        System.out.println(s2.m.money);
//
//        Object o=new student();
//
//    }

//    public static void func(Object obj){
//
//    }
//    public static void main(String[] args) {
//        func(new money());
//        func(new perosn());
//        func(new animal());
//        func(new dog());
//
//        dog d=new dog();
//        d.func1();
//        d.func2();
//        d.func3();
//        System.out.println("--------------");
//        new dog().func1();
//        new dog().func2();
//        new dog().func3();
//
//    }

//    public static void main(String[] args) {
//        student s1=new student();
//        s1.name="张三";
//
//        dog d=new dog();
//        boolean flag=s1.equals(d);
//        System.out.println(flag);
//
//        student s2=s1;
//
//        System.out.println(s1==s2);
//        boolean flag1=s1.equals(s2);
//        System.out.println("flag："+flag1);
//    }

//    public static void main(String[] args) {
//        student s1=new student();
//        s1.name="张三";
//
//        student s2=new student();
//        s2.name="张三";
//
//        //将这两个对象 放到同一个位置去
//        System.out.println(s1.hashCode());
//        System.out.println(s2.hashCode());
//    }


}




